/**
 * IM布局偏好设置工具类
 * 用于保存和恢复用户的界面布局偏好
 */

const STORAGE_KEY = 'im_layout_preferences';

// 默认布局配置
const DEFAULT_LAYOUT = {
  // 聊天页面侧边栏宽度
  chatAsideWidth: 260,
  // 好友页面侧边栏宽度  
  friendAsideWidth: 260,
  // 群聊页面侧边栏宽度
  groupAsideWidth: 260,
  // 聊天输入区域高度
  chatInputAreaHeight: 200,
};

/**
 * 获取布局偏好设置
 * @returns {Object} 布局偏好对象
 */
export function getLayoutPreferences() {
  try {
    const stored = localStorage.getItem(STORAGE_KEY);
    if (stored) {
      const preferences = JSON.parse(stored);
      // 合并默认配置，确保新增的配置项有默认值
      return { ...DEFAULT_LAYOUT, ...preferences };
    }
  } catch (error) {
    console.warn('读取布局偏好设置失败:', error);
  }
  return { ...DEFAULT_LAYOUT };
}

/**
 * 保存布局偏好设置
 * @param {Object} preferences 要保存的偏好设置
 */
export function saveLayoutPreferences(preferences) {
  try {
    const current = getLayoutPreferences();
    const updated = { ...current, ...preferences };
    localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));
  } catch (error) {
    console.warn('保存布局偏好设置失败:', error);
  }
}

/**
 * 获取特定页面的侧边栏宽度
 * @param {string} page 页面名称 ('chat', 'friend', 'group')
 * @returns {number} 侧边栏宽度
 */
export function getAsideWidth(page) {
  const preferences = getLayoutPreferences();
  const key = `${page}AsideWidth`;
  return preferences[key] || DEFAULT_LAYOUT[key];
}

/**
 * 保存特定页面的侧边栏宽度
 * @param {string} page 页面名称 ('chat', 'friend', 'group')
 * @param {number} width 宽度值
 */
export function saveAsideWidth(page, width) {
  const key = `${page}AsideWidth`;
  saveLayoutPreferences({ [key]: width });
}

/**
 * 获取聊天输入区域高度
 * @returns {number} 输入区域高度
 */
export function getChatInputAreaHeight() {
  const preferences = getLayoutPreferences();
  return preferences.chatInputAreaHeight || DEFAULT_LAYOUT.chatInputAreaHeight;
}

/**
 * 保存聊天输入区域高度
 * @param {number} height 高度值
 */
export function saveChatInputAreaHeight(height) {
  saveLayoutPreferences({ chatInputAreaHeight: height });
}

/**
 * 重置布局偏好为默认值
 */
export function resetLayoutPreferences() {
  try {
    localStorage.removeItem(STORAGE_KEY);
  } catch (error) {
    console.warn('重置布局偏好设置失败:', error);
  }
}

/**
 * 防抖函数，用于延迟保存设置
 * @param {Function} func 要执行的函数
 * @param {number} delay 延迟时间（毫秒）
 * @returns {Function} 防抖后的函数
 */
export function debounce(func, delay = 300) {
  let timeoutId;
  return function (...args) {
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => func.apply(this, args), delay);
  };
}
